// 默认图片配置对象
const DEFAULT_IMAGES = {
  // 帽子默认配置
  hatImage: { 
    img: '/images/map.png',          // 默认图片路径
    categories: '帽子',              // 分类
    colors: '',                      // 颜色
    styles: '',                      // 风格
    seasons: '',                     // 季节
    value: 0,                        // 价值
    time: ''                         // 时间
  },
  // 装饰品默认配置
  decoratorImage: { 
    img: '/images/code.png',
    categories: '装饰品',
    colors: '',
    styles: '',
    seasons: '',
    value: 0,
    time: ''
  },
  // 外衣默认配置
  coatImage: { 
    img: '/images/cloth.png',
    categories: '外衣',
    colors: '',
    styles: '',
    seasons: '',
    value: 0,
    time: ''
  },
  // 下衣默认配置
  pantsImage: { 
    img: '/images/shop.png',
    categories: '下衣',
    colors: '',
    styles: '',
    seasons: '',
    value: 0,
    time: ''
  },
  // 鞋子默认配置
  shoesImage: { 
    img: '/images/shoe.png',
    categories: '鞋子',
    colors: '',
    styles: '',
    seasons: '',
    value: 0,
    time: ''
  },
  // 袜子默认配置
  socksImage: { 
    img: '/images/wazi.png',
    categories: '袜子',
    colors: '',
    styles: '',
    seasons: '',
    value: 0,
    time: ''
  }
}

// 页面配置
Page({
  /**
   * 页面的初始数据
   */
  data: {
    weatherImg: '9999',                // 天气图标
    temp: '0',                         // 温度
    city: '未知',                      // 城市
    ava: '/images/wx.png',             // 头像
    province: '未知',                  // 省份
    
    // 初始化各衣物类型为默认值
    hatImage: { ...DEFAULT_IMAGES.hatImage },
    decoratorImage: { ...DEFAULT_IMAGES.decoratorImage },
    coatImage: { ...DEFAULT_IMAGES.coatImage },
    pantsImage: { ...DEFAULT_IMAGES.pantsImage },
    shoesImage: { ...DEFAULT_IMAGES.shoesImage },
    socksImage: { ...DEFAULT_IMAGES.socksImage },
    
    // 新增风格选择相关数据
    showStyleActionSheet: false,      // 是否显示风格选择弹窗
    styleActions: [                   // 风格选项列表
      { name: '休闲' },
      { name: '商务' },
      { name: '运动' },
      { name: '街头' },
      { name: '复古' }
    ],
    selectedStyle: null ,              // 当前选中的风格
    
    // 新增色系选择相关数据
    showColorActionSheet: false,
    colorActions: [
      { name: '黑色' },
      { name: '白色' },
      { name: '红色' },
      { name: '蓝色' },
      { name: '黄色' },
      { name: '绿色' },
      { name: '紫色' },
      { name: '灰色' }
    ],
    selectedColor: null,
    showDialog: false,
    dialogType: '', // 'style'或'color'
  },

  /**
   * 通用图片选择方法
   * @param {string} type - 衣物类型(hatImage/decoratorImage等)
   */
  async chooseImage(type) {
    console.log('[chooseImage] 选择的衣物类型:', type);
    // 只存储类型，不存储数据
    wx.setStorageSync('selectedClosetType', type);
    wx.switchTab({
      url: '/pages/closet/closet'
    });
  },
  
  // 各分类选择方法
  chooseMap() { this.chooseImage('hatImage') },        // 选择帽子
  chooseDocator() { this.chooseImage('decoratorImage') }, // 选择装饰品
  chooseCloth() { this.chooseImage('coatImage') },     // 选择外衣
  chooseDownCloth() { this.chooseImage('pantsImage') }, // 选择下衣
  chooseShoe() { this.chooseImage('shoesImage') },      // 选择鞋子
  chooseWazi() { this.chooseImage('socksImage') },      // 选择袜子

  /**
   * AI推荐功能 - 打开风格选择弹窗
   */
  onAIRecommend() {
    this.setData({ 
      showPop: true,
      isConfirmDisabled: true,
      selectedStyle: null,
      selectedColor: null,
      currentStyleText: '请选择风格',
      currentColorText: '请选择色系',
    });
  },

  onSelectStyle(event) {
    const { value } = event.detail;
    this.setData({ 
      selectedStyle: value,
      currentStyleText: value,
      isConfirmDisabled: !(value && this.data.selectedColor)
    });
  },

  onSelectColor(event) {
    const { value } = event.detail;
    this.setData({ 
      selectedColor: value,
      currentColorText: value,
      isConfirmDisabled: !(value && this.data.selectedStyle)
    });
  },

  onConfirm() {
    if (!this.data.isConfirmDisabled) {
      this.setData({ showPop: false });
      this.doAIRecommend(this.data.selectedStyle);
    }
  },

  onCancel() {
    this.setData({ showPop: false });
  },

  onSelectStyle(event) {
    const index = event.detail.value;
    const selected = this.data.styleActions[index].name;
    this.setData({ 
      selectedStyle: selected,
      currentStyleText: selected,
      isConfirmDisabled: !(selected && this.data.selectedColor)
    });
  },

  onSelectColor(event) {
    const index = event.detail.value;
    const selected = this.data.colorActions[index].name;
    this.setData({ 
      selectedColor: selected,
      currentColorText: selected,
      isConfirmDisabled: !(selected && this.data.selectedStyle)
    });
  },

  onConfirm() {
    if (!this.data.isConfirmDisabled) {
      this.setData({ showPop: false });
      this.doAIRecommend(this.data.selectedStyle);
    }
  },

  async doAIRecommend(style) {
    try {
      wx.showLoading({ title: '智能推荐中...' });
      
      const userinfo = wx.getStorageSync('userinfo');
      const weather = wx.getStorageSync('weather');
      
      if (!userinfo || !userinfo._id) {
        throw new Error('请先登录');
      }
      
      console.log('开始获取用户衣物数据...');
      const res = await wx.cloud.callFunction({
        name: 'clothes',
        data: {
          action: 'recommend',
          query: {
            userid: userinfo._id,
            style: style,
            weather: weather.text,
            temp: weather.temp,
            colorScheme: this.data.selectedColor // 新增色系参数
          }
        }
      });
      
      if (res.result.code !== 200) {
        throw new Error(res.result.message || '获取衣物数据失败');
      }
      
      // 检查返回数据是否为空
      if (!res.result.data || Object.keys(res.result.data).length === 0) {
        wx.showToast({
          title: `没有找到${style}风格的推荐搭配`,
          icon: 'none',
          duration: 2000
        });
        return;
      }
      
      console.log('获取到的推荐数据:', JSON.stringify(res.result.data, null, 2));
      
      // 更新页面数据 - 只更新有数据的分类，保持其他分类不变
      const updateData = {};
      if (res.result.data.帽子 && res.result.data.帽子.length > 0) {
        updateData.hatImage = res.result.data.帽子[0]; // 取第一件
      }
      if (res.result.data.装饰 && res.result.data.装饰.length > 0) {
        updateData.decoratorImage = res.result.data.装饰[0];
      }
      if (res.result.data.外套 && res.result.data.外套.length > 0) {
        updateData.coatImage = res.result.data.外套[0];
      }
      if (res.result.data.下装 && res.result.data.下装.length > 0) {
        updateData.pantsImage = res.result.data.下装[0];
      }
      if (res.result.data.鞋子 && res.result.data.鞋子.length > 0) {
        updateData.shoesImage = res.result.data.鞋子[0];
      }
      if (res.result.data.袜子 && res.result.data.袜子.length > 0) {
        updateData.socksImage = res.result.data.袜子[0];
      }
      
      this.setData(updateData);
      
      wx.showToast({ 
        title: `${style}风格推荐完成`, 
        icon: 'success' 
      });
      
    } catch (err) {
      console.error('推荐失败:', err);
      wx.showToast({ 
        title: '推荐失败: ' + (err.message || '未知错误'),
        icon: 'error'
      });
    } finally {
      wx.hideLoading();
    }
  },

  /**
   * 根据天气和温度确定季节
   * @param {string} weatherText - 天气描述
   * @param {number|string} temperature - 温度
   * @return {string} 季节
   */
  getSeasonByWeather(weatherText, temperature) {
    const temp = Number(temperature);
    if (temp >= 28) return '夏季';
    if (temp <= 10) return '冬季';
    if (weatherText.includes('春')) return '春季';
    if (weatherText.includes('秋')) return '秋季';
    return '春季'; // 默认春季
  },

  /**
   * 从数组中随机选择一件符合季节的衣物
   * @param {Array} items - 衣物数组
   * @param {string} season - 季节
   * @return {Object} 选中的衣物
   */
  getRandomItem(items = [], season) {
    if (!items || items.length === 0) {
      return { 
        ...DEFAULT_IMAGES.hatImage, 
        time: new Date().toISOString().split('T')[0] 
      };
    }
    
    // 优先选择符合季节的衣物
    const seasonItems = items.filter(item => item.seasons === season);
    
    // 如果没有符合季节的，则从所有衣物中随机选择
    const availableItems = seasonItems.length > 0 ? seasonItems : items;
    
    // 随机选择一件
    const randomIndex = Math.floor(Math.random() * availableItems.length);
    return {
      ...availableItems[randomIndex],
      time: new Date().toISOString().split('T')[0]
    };
  },

  /**
   * 保存功能 - 将当前选择保存到数据库
   */
  async onSave() {
    try {
      wx.showLoading({ title: '保存中...' });
      
      const userinfo = wx.getStorageSync('userinfo');
      if (!userinfo || !userinfo._id) {
        throw new Error('请先登录');
      }
  
      // 收集所有图片链接，不再过滤任何图片
      const images = [
        this.data.hatImage.img,
        this.data.decoratorImage.img,
        this.data.coatImage.img,
        this.data.pantsImage.img,
        this.data.shoesImage.img,
        this.data.socksImage.img
      ];
  
      // 保存到数据库
      const res = await wx.cloud.callFunction({
        name: 'clothes',
        data: {
          action: 'save',
          data: {
            userid: userinfo._id,
            images: images,
            time: new Date().toISOString().split('T')[0]
          }
        }
      });
      console.log('res',res);
      // 检查云函数返回状态
      if ( res.result.code === 200) {
        wx.showToast({ 
          title: '搭配保存成功', 
          icon: 'success' 
        });
      } else {
        throw new Error(res.result.message || '保存失败');
      }
      
    } catch (error) {
      console.error('保存失败:', error);
      wx.showToast({ 
        title: '保存失败: ' + (error.errMsg || error.message), 
        icon: 'error' 
      });
    } finally {
      wx.hideLoading();
    }
  },

  /**
   * 清空功能 - 删除云端和本地所有数据
   */
  async onClear() {
    const confirmation = await wx.showModal({
      title: '确认清空',
      content: '将删除云端和本地所有数据',
      confirmText: '确定'
    });

    if (confirmation.confirm) {
      try {
        wx.showLoading({ title: '删除中...' });
        
        // 获取所有云文件ID
        const storedFiles = Object.keys(DEFAULT_IMAGES)
          .map(key => {
            const item = wx.getStorageSync(key);
            return item?.img?.startsWith('cloud://') ? item.img : null;
          })
          .filter(Boolean);

        // 批量删除云文件
        if (storedFiles.length > 0) {
          await wx.cloud.deleteFile({ 
            fileList: storedFiles 
          });
        }

        // 清除本地数据
        Object.keys(DEFAULT_IMAGES).forEach(key => {
          wx.removeStorageSync(key);
        });
        
        // 重置为默认数据
        this.setData({ ...DEFAULT_IMAGES });
        
        wx.showToast({ title: '清空完成', icon: 'success' });
      } catch (error) {
        console.error('清空失败:', error);
        wx.showToast({ 
          title: '清空失败: ' + (error.errMsg || error.message), 
          icon: 'error' 
        });
      } finally {
        wx.hideLoading();
      }
    }
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {

  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {
    // 页面初次渲染完成时执行
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function() {
    // 1. 检查是否有从closet选择的数据
    const selectedType = wx.getStorageSync('selectedClosetType');
    const selectedItem = wx.getStorageSync('selectedClosetItem');
    
    if (selectedType && selectedItem) {
      this.setData({
        [selectedType]: {
          img: selectedItem.img,
          categories: selectedItem.categories || '',
          colors: selectedItem.colors || '',
          styles: selectedItem.styles || '',
          seasons: selectedItem.seasons || '',
          value: selectedItem.value || 0,
          time: selectedItem.time || ''
        }
      });
      wx.setStorageSync('selectedClosetType', '')
      wx.setStorageSync('selectedClosetItem', '')
    }
  
    // 3. 用户登录检查
    let userinfo = wx.getStorageSync('userinfo');
    if (!userinfo) {
      return wx.reLaunch({ url: '/pages/login/login' });
    }
  
    // 4. 更新天气和用户信息
    const city = wx.getStorageSync('city');
    const weather = wx.getStorageSync('weather');
    this.setData({
      ava: userinfo.img,
      weatherImg: weather?.icon || '9999',
      temp: weather?.temp || '0',
      city: city?.adm2 || '未知',
      province: city?.adm1 || '未知'
    });
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {
    // 页面隐藏时执行
  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {
    // 页面卸载时执行
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh: function () {
    // 下拉刷新时执行
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom: function () {
    // 页面上拉触底时执行
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {
    // 用户分享时执行
  }
})